- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 20

Thema: Servomesstester (Servotester und –messaufbau)

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    @Oberallgeier

    mir erschließt sich dein Diagramm nicht so ganz. Da ich die Legende zu den Kurven nicht richtig lesen kann (insbesondere zur zweiten und dritten Kurve), weiß ich nicht wirklich, was sie anzeigen.

    Da ich unter Linux arbeite, ist meine Lösung Daten auf dem PC anzuzeigen für dich (EXCEL klingt nach Windows) möglicherweise nicht machbar. Ich habe ein kleines C Programm, das an der seriellen lauscht und auf die Startmeldung wartet, die ich am Anfang eines Datensatzes schicke. Es liest dann zeilenweise die Daten und schreibt sie passend für das Anzeigeprogramm (z.B. gnuplot) in eine Datei. Wenn die Endemeldung kommt, beendet es sich. Ich starte dann das Plotprogramm mit dieser Datei. Mit einem passenden printf() könnte dabei auch ein Format für EXCEL erzeugt werden. Dazu bräuchtest du aber einen C Compiler für Windows.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.694
    Hi Klebwax, danke für die offene Kritik. Du hast Recht - es war mein erster Versuch auch Texte und Kurven in einem YuTV-Video anzuzeigen. Klappt wirklich nur mit sehr bescheidener Qualität. Tut mir leid, dass das so schlecht rauskommt - und mit den bescheidenen Beschreibungen auch eher für die Katz ist.
    Zitat Zitat von Klebwax Beitrag anzeigen
    ... mir erschließt sich dein Diagramm nicht so ganz ... Kurven nicht richtig lesen kann ...
    Dann versuch ich´s mal hier ausführlich, die Diagramme kann man hoffentlich mit der folgenden Erklärung trotzdem lesen.

    Zur Servoansteuerung:
    Es werden aktuell 8 Servos angesteuert, Servo 1 bis 8. Gemessen wird stets Servo 7. Der entsprechende Servopointer wird vom Timer1A alle 2,56 ms weitergeschaltet - bei 8 Servos kommt also jeder Servo alle 20,48 ms dran. Mit der Weiterschaltung wird Timer1B gestartet mit der jeweils gewünschten Pulsvorgabe und es wird der entsprechende Servopin eingeschaltet. Mit Ablauf von Timer1B wird der Servopin ausgeschaltet.

    Aufbau der Messung
    - Während der Messdauer werden im Abstand von je 1 Millisekunde Werte erfasst, eine höhere Auflösung ist theoretisch möglich, praktisch aber wohl nicht nötig und wegen des deutlich höheren Datenaufkommens mit dem vorhandenen Controller auch schwierig.
    - Die Werte werden in drei Wertefelder eingetragen und nach Ablauf der Messung als Liste ausgegeben (siehe Liste).
    - Erfasst werden 999 (oder bis zu 1599) Gruppen von je 3 int16-Werten. Das sind in den vorgelegten Diagrammen die Werte für Servopointer, ADC-Wert und Boardzeit in 50µs-Zeitschritten. Das Format int16 für den Servopointer hat programmtechnische Gründe, die anderen Werte benötigen das Format für ihre Größe.
    - Die Messung wird nach Startfreigabe erst gestartet, wenn Servo 2 aktiv ist - damit ist ein Vorlauf der Datenerfassung von rund 10 ms (von Servo2 bis Servo7) gewährleistet, BEVOR der erste, neue Positionswert für die Messfahrt an Servo7 abgegeben wird. De fakto startet der protokollierte Servolauf also rund 10 ms nach Beginn der Aufzeichnung und dokumentiert den Zustand in dieser Zeit VOR dem Start der Messung. Damit kann man sicher die Verzögerungszeit der Bewegung ab Eingabe eines Positionswertes erfassen.
    - Die Messung erfolgt nach zwei Verfahren. Einmal ist "full speed" möglich. Dabei wird lediglich der Zielpunkt des Servos ausgegeben, der Servo fährt mit der vollen Geschwindigkeit entsprechend seiner Auslegung. Zweitens ist die "SlowMotion" möglich. Dabei wird bei JEDER neuen Servoperiode ein neues Ziel gesetzt, das zwischen 1 und 189 ticks von der aktuellen VORGABE (nicht dem aktuell erreichten Punkt!) entfernt ist. Hier sind Werte unter 10 kaum sinnvoll, aber praktisch möglich. Die (bisher getesteten) Servos reagieren (erst) auf Fortschrittswerte zwischen 10 und 15 Incremente. Bei Vorgabe von Increment 190 ticks wird full speed gefahren, also eine Zielvorgabe - egal wieviel Perioden die Fahrt bis dahin dauert.
    - Die Messung wird mit Eintrag des letzen Datentripels beendet.
    - Zur optischen Anzeige der Datenerfassung wird während der Messung eine Signal-LED eingeschaltet.
    - Nach Ende der Messung können in einem gesonderten Menuepunkt die aufgezeichneten Daten vom Terminalfenster in die Tabellenkalkulation übertragen werden, siehe Tabellenspalten C, D, E und F.

    Auswertung:
    - Die interne Boardzeit Izeit_1 läuft bis 20000 (entsprechend 1 Sekunde), daher muss für eine saubere Diagrammdarstellung der Wert bei mehreren Izeit_1-Perioden - je nach Datenumfang in Schritten von 20000 erhöht werden, siehe Tabelle Zeile 10 ab Spalte I.
    - Mit der korrigierten Boardzeit (zeit/tupsi) wird die Laufzeit der MEssung in Millisekunden (Faktor 0,05) errechnet, Spalte K. Die Drehgeschwindigkeit des Servos in ΔADC/Δms wird errechnet. Für die bessere Sichtbarkeit wird dieser Wert mit dem Geschwindigkeitsfaktor N8 multipliziert und mit dem Faktor N9 im Nullpunkt verschoben.
    Die Darstellung des ADC-Wertes des Messpotentiometers über die Messzeit im Diagramm ist die blaue, etwas aufgedickte Linie.
    - Die schrecklichrosa Linienflut ist die Geschwindigkeit. Wegen der sehr geringen Unterschiede im ADC-Wert und des kleinen Zeitschrittes ist das nur ein mickriges Hin-und-Her das sehr wenig Aussagekraft hat. Daher die Trendlinie als gleitender Durchschnitt der letzten zehn Perioden. Erst daraus kann sinnvoll auf den >momentanen< GEschwindigkeitsverlauf des Servos geschlossen werden.
    - Die Laufzeit von Position 1 (Abfahrt, im Tabellenblatt SrvZat) nach Position 2 (Ziel, im Tabellenblatt SrvZbt) ist durch Ablesen des Diagramms oder aus der Tabelle zu erfassen. Hier bietet das Diagramm eine eindeutige Hilfe wegen des sichtbaren Kurvenverlaufes ACD und gleitender Durchschnitte.

    Die Tabelle (Excel) mit Diagramm 04-Sep13-15h00_inc-30.xls habe ich im Original beigelegt, als Beispiel - Übersicht zum Erklären - ist ein Dump einer weiteren Messauswertung für meinen High-Torque beigelegt.

    Hoffentlich nutzt diese Beschreibung für ein besseres Verständnis der Messwerte.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken List_out.jpg  
    Angehängte Dateien Angehängte Dateien
    Geändert von oberallgeier (07.09.2013 um 22:49 Uhr) Grund: Liste nachgereicht
    Ciao sagt der JoeamBerg

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.694

    Startverzögerung bei einem getesteten, analogen Servo

    Auffallend bei meinen Servomessungen ist die beachtliche Verzögerung von Übergabe der Servosollposition an den Pulstimer bis zum Beginn der Servobewegung. Ich hatte mir deswegen statt der Boardzeit (Izeit_1 - aus dem Heartbeat) die Servosollposition des Messervos - Servo Nr 7 - als drittes Datum ausgeben lassen.

    Anschließend eine Messfahrt mit dem High-Torque Servo 1501MG und full speed. Von Übergabe der Servosollposition an den Timer bis zum Beginn der Bewegung habe ich 65 ms ± 2 ms gemessen. Das sieht auf den ersten Blick riesig schlecht aus.

    Ich rechne mal nach:
    Übergabe der Servosollposition an den Servotimer während der Laufzeit des Servopulses 6. Runde 2 ms später, mittlerweile zeigt der Servopointer auf den Messservo Nr.7, wird dieser Wert in den Timerspeicher OCR1B geschrieben
    Code:
    // - - - - - - - - - - - - - - - -
      switch (Svpt)                 // Servo[Svpt] wählen + dessen Rampe starten
      {                             //
        case 1:   SetBit ( PC, Servo1 ); break;
        case 2:   SetBit ( PC, Servo2 ); break;
        case 3:   SetBit ( PC, Servo3 ); break;
        case 4:   SetBit ( PC, Servo4 ); break;
        case 5:   SetBit ( PC, Servo5 ); break;
        case 6:   SetBit ( PC, Servo6 ); break;
        case 7:   SetBit ( PA, Servo7 ); break;
        case 8:   SetBit ( PA, Servo8 ); break;
        case 9:   SetBit ( PA, Servo9 ); break;
        case 10:  SetBit ( PA, Servo10); break;
        default: break;             // hierher würde noch n Fehlerflag passen
      }             // Ende switch (Svpt)
    // - - - - - - - - - - - - - - -
    //  OCR1B   = Srv_tm[Svpt];    // Stellwert ist durch Rampenwert Srv_tm definiert
    und der zuständige Puls gestartet.

    Etwa 2 ms später, die maximal mögliche Standard-Pulszeit ist abgelaufen, KÖNNTE der Servo merken, was los ist. Nehmen wir mal an, er wartet bis eine Standardperiode vollständig abgelaufen ist - oder bis ein neuer Puls kommt, also 20 ms.

    Bisher sind also ca. 20 ms vergangen seit der Controller dem Servo das nächste Wunschziel angegeben hat.

    Nun könnte der Motor loslaufen. Bei meinen Motoren aus dem ES-05-Servo hatte ich (im System MiniD0 und Dottie) eine Motorzeitkonstante von 8 bis 12 ms gemessen. Dies ist die Zeit zum Hochlaufen des Motors bis nahe Endgeschwindigkeit. Der grössere Motor des HighTorque darf länger brauchen, sagen wir mal wieder 20 ms. Dann könnte noch etwas Getriebespiel dazu kommen, nochmal zehn Millisekunden.

    Mittlerweile sind also 50 Millisekunden vergangen, seit der controller dem Servo das nächste Wunschziel angegeben hat. Da sind die gemessenen 65 ms ja einigermassen glaubhaft.

    Darüber sollten wir nachdenken *ggg*.
    Ciao sagt der JoeamBerg

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.694

    Servotester kompakt

    Ein zweiter Servotester ist entstanden; eigentlich war der Anlass der vorhandene ardu-nano-Clone für weniger als fünf Steine.

    Aufgabe
    Baue einen Servotester mit Anzeige von Periodendauer und Pulsdauer in µs oder in Ticks. Pulsdauer sollte bis rund 3 oder 4 ms einstellbar sein.

    Hardware:
    Anschlussklemmen
    78S05...... Typ "S" - weil Servos schon recht hungrig sein können
    nano-Clone
    TrimmPoti 10k
    3 Tasten
    1 LED (Power, Heartbeat-LED stellt der nano)
    2 3x1-Pfostenstecker ....R RX-GND-TX, SDA-GND-SCL
    Wannenstecker 2x10
    LCD 16x2

    Software wie bei meinen üblichen Ansteuerungen, diesmal aber ohne Slowmotion. Die LED-Anzeige bringt typisch Ticks (16 MHz, clk/8, 1 Tick sind daher 0,5 µs) für die Periode, 20 ms entsprechen 40 000 Ticks = Standardeinstellung, und einen Bereich des Pulses von z.B. als einfachsten Fall (ADCnetto*5+1 => 1 ... 5116 bzw.) 0,5 µs bis 2,55 ms.

    Damit ist eine Ansteuerung über Poti simpel möglich zwischen den genannten Pulslängen - Werte die bei meiner geringen Servoauswahl die Grenzen der Servos deutlich übersteigen. Ein Erreichen der Grenze wird aktuell auf einen ADC-Wert genau (± 2,5 µs) diagnostizierbar über den Stromverbrauch des Testers und spätestens über die Geräusche beim Erreichen des inneren Anschlags.

    Dumm, dass der nano nur mit 16 MHz tickt, da muss ich immer auf meine typischen 20M umrechnen. Trotzdem ist es für mich sehr praktisch die tatsächlichen, elektrischen und mechanischen Grenzen des jeweils individuellen Servos ausmessen zu können.

    Insgesamt kommt mir das so praktisch vor, dass ich mittlerweile einen Rumpf der Software auf den Servocontroller-Platinen von Archie peu-à-peu einbaue, Ansteuerung erfolgt dort über einen Allzweckpfostenstecker 2x3, der mir eine Pfostenreihe Vcc-ADC3-GND zur Verfügung stellt. Der entsprechende Test-Stecker trägt das Test-Poti . . . und hier sind wegen des arbeitenden 20 MHz-Quarzes auch keine Umrechnungen mehr nötig.
    Ciao sagt der JoeamBerg

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    55
    Beiträge
    1.258
    Darüber sollten wir nachdenken *ggg*.
    So ein Servo wird, wenn es analog ist, einen Tiefpass drin haben, der Störungen ausfiltert.
    Wenn es digital ist, macht er das eben mit dem internen Controller. Erst wenn der Puls 3 mal hintereinander die plötzliche Abweichung zeigt, dann wird sie auch genommen. (nur vermutet)
    Kannst du noch feststellen, welche Verzögerung deine Messeinrichtung hat? (Winkel, Strom)
    Ändert sich die Ansprechzeit, wenn du die Periodendauer auf 10ms verkürzt?

    Gruß, Michael

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.694
    Zitat Zitat von Michael Beitrag anzeigen
    ... Kannst du noch feststellen, welche Verzögerung deine Messeinrichtung hat? (Winkel, Strom)
    Ändert sich die Ansprechzeit, wenn du die Periodendauer auf 10ms verkürzt? ...
    Über Verzögerung bei der Bewegung habe ich ja schon oben berichtet, eher qualitativ. Die Strommessungen erfolgten bisher immer ziemlich piano mit dem Labornetzteil, das Vorhaben einer Erfassung über (Hall-)Sensor und Controller ist bisher leider nicht realisiert worden.

    Messtechnisch habe ich auch die Ansprechzeit nicht weiter untersucht. Eine gewisse Ahnung von der Funktion haben wir seit loki mit unterschiedlichen Periodenzeiten experimentierte, siehe auch Servo-Wissen im RN - ab ".. Von der Standard-Pulsdauer 20 ms kann je nach Servomodell erheblich abgewichen werden .." - der zweite Absatz im Link. Das hatte ich ins Wiki übernommen nachdem ich das grob bei meinen Servos auch festgestellt hatte.

    Dein Anstoß sagt nun, dass ich vielleicht doch mal noch ein paar Messungen mit dem "großen" Tester machen müsste, denn nur der hat auch eine externe Winkelmessung - mit nem Poti aus nem Servo und die entsprechend schnelle Messung mit ausreichend langer Messdauer. Aber dazu müsste ich endlich mal auch ne schnelle Messung der Stromaufnahme realisieren. Ohhh je, grad läuft bei mir der Projektabschnitt "Geschwindigkeitsanpassung von Archie aufgrund von Entfernungs- und Abstandssensoren". Und da klappts nach Problem mit den zwei SRF02 Abstände zu erfassen und per UART-Telegramm an die Motorplatine (MoCo - MotorController) zu senden - einschließlich positiven Test zum Telegrammempfang. Es gibt so viel zu tun (und die Arme sind grad vom Klettern recht lahm...).
    Ciao sagt der JoeamBerg

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    29.05.2005
    Beiträge
    1.018
    Hossa oberallgeier,

    dann bau doch mal servounterstützte Arme. Die werden nicht so schnell lahm und du hast mehr Zeit für andere Dinge

    Wenn du aber am "großen" Tester doch schon eine Winkelmessung machen kannst, dann sollte es doch ausreichen eine Änderung derselben zu messen und halt nur die Zeit vom 'Absenden' der neuen Zielposition bis zur ersten registrierten Winkelmessung zu nehmen. Und Schwups ist die Bestätigung messbar.
    Michaels Annahme könnte dann auch verifiziert werden. Faktor 3 der 20 ms als Grundgedanke plus ein wenig Laufzeit deiner CPU und Mechanik sollte somit reproduzierbar bei deinen schon gefundenen 63 bis 67 ms nun automatisch zig mal für eine Statistik wiederholbar sein.

    Viele Grüße
    Sternthaler
    Lieber Asuro programieren als arbeiten gehen.

Ähnliche Themen

  1. Und schon wieder ein Servotester, aber ein erweiterter
    Von Searcher im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 35
    Letzter Beitrag: 06.09.2013, 20:16
  2. Servotester mit Dual Rate- und Expofunktion
    Von dingeldongel im Forum Elektronik
    Antworten: 0
    Letzter Beitrag: 09.10.2012, 08:52
  3. Servotester für VB und Bascom
    Von kalletronic im Forum Open Source Software Projekte
    Antworten: 15
    Letzter Beitrag: 31.07.2011, 10:58
  4. Servotester
    Von avus17 im Forum Elektronik
    Antworten: 36
    Letzter Beitrag: 06.02.2011, 21:11
  5. Servotester
    Von vohopri im Forum Eigene fertige Schaltungen und Bauanleitungen
    Antworten: 13
    Letzter Beitrag: 27.07.2009, 03:24

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests